package com.me.jingdongshop.model.protocol;

import com.google.gson.JsonObject;
import com.me.common.base.Const;

import java.util.Map;

import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Query;

/**
 * Retrofit接口，定义网络请求方法
 *
 * @author Chilam
 */
public interface IHttpService {


    String HOST = Const.HOST_IP;
    String HOST_URL = "http://"+HOST+":8080/market/";

    /** 首页 */
    String GET_HOME = "home";

    int HTTP_HOME = 10;
    int HTTP_HOME_SHOP = 22;

    /** 搜索商品列表 */
    String GET_SEARCH = "search";
    /** 搜索推荐 */
    String GET_SEARCH_REC = "search/recommend"
            ;
    int HTTP_SEARCH = 21;
    int HTTP_SEARCH_REC = 22;

    //专题及品牌
    /**促销快报*/
    String GET_TOPIC = "topic";
    /** 专题商品列表 */
    String GET_TOPIC_PLIST = "topic/plist";
    /** 推荐品牌 */
    String GET_BRAND = "brand";
    /** 推荐品牌列表 */
    String GET_BRAND_PLIST = "brand/plist";
    /** 限时抢购 */
    String GET_LIMITBUY = "limitbuy";
    /** 新品上架 */
    String GET_NEWPRODUCT = "newproduct";
    /**  热门单品 */
    String GET_HOTPRODUCT = "hotproduct";

    int HTTP_TOPIC = 31;
    int HTTP_TOPIC_PLIST = 32;
    int HTTP_BRAND = 33;
    int HTTP_BRAND_PLIST = 34;
    int HTTP_LIMITBUY = 35;
    int HTTP_NEWPRODUCT = 36;
    int HTTP_HOTPRODUCT = 37;

    //分类及详情
    /** 分类请求 */
    String GET_CATEGORY = "category";
    /** 商品列表 */
    String GET_PRODUCTLIST = "productlist";
    /** 商品详情 */
    String GET_PRODUCT = "product";
    /** 商品描述 */
    String GET_PRODUCT_DES = "product/description";
    /** 商品评论 */
    String GET_PRODUCT_COMMENT = "product/comment";
    /** 商品收藏 */
    String GET_PRODUCT_FAVO = "product/favorites";

    int HTTP_CATEGORY = 41;
    int HTTP_PRODUCTLIST = 42;
    int HTTP_PRODUCT = 43;
    int HTTP_PRODUCT_DES = 44;
    int HTTP_PRODUCT_COMMENT = 45;
    int HTTP_PRODUCT_FAVO  = 46;

    //购物车
    /** 进入购物车、修改数量、删除商品 */
    String POST_CART = "cart";

    int HTTP_CART = 50;

    //结算中心
    /** 结算中心信息 */
    String POST_CHECKOUT = "checkout";
    /** 提交结算 */
    String POST_ORDERSUMBIT = "ordersumbit";
    /** 发票 */
    String POST_INVOICE = "invoice";

    int HTTP_CHECKOUT = 61;
    int HTTP_ORDERSUMBIT = 62;
    int HTTP_INVOICE = 63;

    //我的账户
    /** 登录 */
    String POST_LOGIN = "login";
    /** 注册 */
    String POST_REGISTER = "register";
    /** 账户中心 */
    String GET_USERINFO = "userinfo";
    /** 注销 */
    String POST_LOGOUT = "logout";
    /** 版本检测 */
    String GET_VERSION = "version";
    /** 收藏夹 */
    String GET_FAVO = "favorites";

    int HTTP_LOGIN = 71;
    int HTTP_REGISTER = 72;
    int HTTP_USERINFO = 73;
    int HTTP_LOGOUT = 74;
    int HTTP_VERSION = 75;
    int HTTP_FAVO = 76;

    //订单
    /** 订单列表 */
    String GET_ORDERLIST = "orderlist";
    /** 订单详情 */
    String GET_ORDERDETAIL = "orderdetail";
    /** 取消订单 */
    String GET_ORDERCANCEL = "ordercancel";

    int HTTP_ORDERLIST = 81;
    int HTTP_ORDERDETAIL = 82;
    int HTTP_ORDERCANCEL = 83;

    //地址
    /** 地址列表 */
    String GET_ADDRESS_LIST = "addresslist";
    /** 地址三级列表 */
    String GET_ADDRESS_AREA= "addressarea";
    /** 地址保存和修改 */
    String POST_ADDRESS_SAVE = "addresssave";
    /** 设置默认地址 */
    String GET_ADDRESS_DEF = "addressdefault";
    /** 删除地址 */
    String GET_ADDRESS_DEL = "addressdelete";

    int HTTP_ADDRESS_LIST = 91;
    int HTTP_ADDRESS_AREA = 92;
    int HTTP_ADDRESS_SAVE= 93;
    int HTTP_ADDRESS_DEF = 94;
    int HTTP_ADDRESS_DEL = 95;

    //帮助中心
    /** 帮助列表 */
    String GET_HELP = "help";
    /** 帮助内容 */
    String GET_HELP_DETAIL = "helpDetail";

    int HTTP_HELP = 101;
    int HTTP_HELP_DETAIL = 102;
    int HTTP_LOCATION = 103;
    int HTTP_CITY = 104;
    int HTTP_COUNTY = 105;
    //新增地址
    int HTTP_SAVE_ADDRESS = 106;
    int GOODS_ADDRESS_CODE = 202;
    /*商品列表排序ID*/
    int HTTP_PRODUCTLIST_priceUp = 101;
    int HTTP_PRODUCTLIST_priceDown = 102;
    int HTTP_PRODUCTLIST_commentDown = 103;
    int HTTP_PRODUCTLIST_shelvesDown = 104;

    /** 获取首页数据 */
    @GET(GET_HOME)
    public Call<JsonObject> getHome();

    /** 搜索 */
    @GET(GET_SEARCH)
    public Call<JsonObject> getSearch(@Query("page") int page,
                                      @Query("pageNum") int pageNum,
                                      @Query("orderby") String orderBy,
                                      @Query("keyword") String keyword);
    /** 搜索推荐 */
    @GET(GET_SEARCH_REC)
    public Call<JsonObject> getSearchRec();
    //专题及品牌
    /** 促销快报（可能是发现界面顶部轮播图） */
    @GET(GET_TOPIC)
    public Call<JsonObject> getTopic(@Query("page") int page,
                                     @Query("pageNum") int pageNum);
    /** 获取推荐商品（发现页面）数据 */
    @GET(GET_BRAND)
    public Call<JsonObject> getBrand();
    /** 限时抢购 */
    @GET(GET_LIMITBUY)
    public Call<JsonObject> getLimitbuy(@Query("page") int page,
                                        @Query("pageNum") int pageNum);
    /** 新品上架 */
    @GET(GET_NEWPRODUCT)
    public Call<JsonObject> getNewproduct(@Query("page") int page,
                                          @Query("pageNum") int pageNum,
                                          @Query("orderby") String orderby);
    /** 热门单品 */
    @GET(GET_HOTPRODUCT)
    public Call<JsonObject> getHotproduct(@Query("page") int page,
                                          @Query("pageNum") int pageNum,
                                          @Query("orderby") String orderby);

    //分类及详情
    /** 分类请求 */
    @GET(GET_CATEGORY)
    public Call<JsonObject> getCategory(@Query("page") int page,
                                        @Query("pageNum") int pageNum);
    /** 商品列表 */
    @GET(GET_PRODUCTLIST)
    public Call<JsonObject> getProductList(@Query("page") int page,
                                           @Query("pageNum") int pageNum,
                                           @Query("cId") int cId,
                                           @Query("orderby") String orderby);
    /** 商品描述 */
    @GET(GET_PRODUCT_DES)
    public Call<JsonObject> getProductDes(@Query("pId") int pId);
    /** 商品详情 */
    @GET(GET_PRODUCT)
    public Call<JsonObject> getProduct(@Query("pId") int pId);
    /** 商品评论 */
    @GET(GET_PRODUCT_COMMENT)
    public Call<JsonObject> getProComment(@Query("page") int page,
                                          @Query("pageNum") int pageNum);
    /** 商品收藏 */
    @GET(GET_PRODUCT_FAVO)
    public Call<JsonObject> getProFavo(@Query("pId") int pId);

    //购物车
    /** 进入购物车 */
    @POST(POST_CART)
    @FormUrlEncoded
    public Call<JsonObject> getCart(@Field("sku") String sku);
    /** 修改数量 */
    //同上
    /** 删除商品 */
    //同上

    //结算中心
    /** 结算中心信息 */
    /** 提交结算 */
    /** 发票 */

    //我的帐户
    /** 登录 */
    @POST(POST_LOGIN)
    @FormUrlEncoded
    public Call<JsonObject> login(@Field("username") String username,
                                  @Field("password") String password);
    /** 注册 */
    @POST(POST_REGISTER)
    @FormUrlEncoded
    public Call<JsonObject> register(@Field("username") String username,
                                     @Field("password") String password);
    /** 账户中心 */
    @GET(GET_USERINFO)
    public Call<JsonObject> getUserInfo(@Header("userid") String uid);
    /** 注销 */
    @POST(POST_LOGOUT)
    @FormUrlEncoded
    public Call<JsonObject> logout();

    String GET_LOCATION = "addressarea";
    String GET_ADDRESS_SAVE = "addresssave";
    /** 获得省市县地址 */
    @GET(GET_LOCATION)
    public Call<JsonObject> getlocation(@Query("id") int id);
    /** 新增地址 */
    @POST(GET_ADDRESS_SAVE)
    @FormUrlEncoded
    public Call<JsonObject> saveAddress(@Header("userid") String userid, @FieldMap Map<String,String> map);
    /** 地址列表 */
    @GET(GET_ADDRESS_LIST)
    public Call<JsonObject> getAddressList(@Header("userid") String uid);
    /** 设置默认地址 */
    @POST(GET_ADDRESS_DEF)
    @FormUrlEncoded
    public Call<JsonObject> getAddressDefault(@Header("userid") String uid,@Field("id") int id);
    /** 收藏夹 */
    @GET(GET_FAVO)
    public Call<JsonObject> getFavo(@Header("userid") int userId,
                                    @Query("page") int page,
                                    @Query("pageNum") int pageNum);
    /** 帮助中心 */
    @GET(GET_HELP)
    public Call<JsonObject> getHelpCenter();
    /** 帮助中心内容 */
    @GET(GET_HELP_DETAIL)
    public Call<JsonObject> getHelpDetail(@Query("id") int id);
}
